package de.nak.terminumfrageapp.model;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * 
 * @description Objekt Klasse Benutzer
 * @author Cornelia Kugler, Inga Brinkmann, Tim Danker
 * 
 */

@Entity
@Table(name = "BENUTZER")
public class Benutzer implements Serializable {
	/** The serial version UID. */
	private static final long serialVersionUID = 1L;

	/** Identifizierungsattribut */
	private Long id;

	/** Name */
	private String name;

	/** Vorname */
	private String vorname;

	/** Email */
	private String email;

	/** Passwort */
	private String passwort;

	/** Set von Umfragen. */
	private Set<Umfrage> umfragen;

	/** Set von Umfragen. */
	private Set<Rueckmeldung> rueckmeldungen;

	@OneToMany(mappedBy = "benutzer")
	public Set<Rueckmeldung> getRueckmeldungen() {
		return rueckmeldungen;
	}

	public void setRueckmeldungen(Set<Rueckmeldung> rueckmeldungen) {
		this.rueckmeldungen = rueckmeldungen;
	}

	public void setUmfragen(Set<Umfrage> umfragen) {
		this.umfragen = umfragen;
	}

	@OneToMany(mappedBy = "ersteller")
	public Set<Umfrage> getUmfragen() {
		return umfragen;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Column(length = 50, nullable = false)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Column(length = 50, nullable = false)
	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	@Column(length = 50, unique = true, nullable = false)
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(length = 50, nullable = false)
	public String getPasswort() {
		return passwort;
	}

	public void setPasswort(String passwort) {
		this.passwort = passwort;
	}

	/**
	 * @description ordnet dem Benutzer eine Umfrage zu.
	 * @param die
	 *            zuzuordnende @link Umfrage
	 */
	public void umfrageZuordnen(Umfrage umfrage) {

		if (umfrage == null) {
			throw new IllegalArgumentException();
		}
		if (this.equals(umfrage.getErsteller())) {
			return;
		}
		if (umfrage.getErsteller() != null) {
			umfrage.getErsteller().getUmfragen().remove(umfrage);
		}
		umfrage.setErsteller(this);
		this.umfragen.add(umfrage);
	}

	/**
	 * @description ordnet dem Benutzer eine Rueckmeldung zu.
	 * @param die
	 *            zuzurodnende @link Rueckmeldung
	 */
	public void rueckmeldungZuordnen(Rueckmeldung rueckmeldung) {
		if (rueckmeldung == null) {
			throw new IllegalArgumentException();
		}
		if (this.equals(rueckmeldung.getBenutzer())) {
			return;
		}
		if (rueckmeldung.getBenutzer() != null) {

			rueckmeldung.getBenutzer().getRueckmeldungen().remove(rueckmeldung);
		}
		rueckmeldung.setBenutzer(this);
		this.rueckmeldungen.add(rueckmeldung);
	}

}
